自碰撞检测算法使用文档

修订日期 修订版本 修订内容 修订人
2024.12.17 V0.1 初始化文档 邓誉鑫

[TOC]

1 接口介绍

在机械臂末端安装基础几何体来进行自碰撞检测, 目前算法支持如下基础几何体类型:球体、圆柱体、 圆锥体、 长方体、 平面、 三角形网格(mesh)、点云, 通过下面接口将其添加到机器人的碰撞几何体中(所添加的几何体与机器人连杆固连成为机器人的一部分,可以进行自碰撞检测)

    /**
     * @brief 设置机械臂连杆对应的碰撞几何体模型
     * @param link_name: 连杆名称,通过 mdlGetLinkName 获得
     * @param shapes: 几何模型,支持包括包络球在内的多种几何体类型
     * @param origins: 几何模型参考坐标系在连杆坐标系的位姿
     * @return < 0, 表示设置失败
     */
    ARAL_API_COMMON(1.0) int mdlSetLinkCollisionGeometryModel(const std::string& link_name, const std::vector<geometric_shapes::ShapePtr>& shapes, const std::vector<RLPose>& origins)const = 0;

检测机械臂是否发生自碰撞

    /**
     * @brief 检查机械臂是否发生碰撞
     * @param joint: 机械臂的构型(关节角)
     * @param checkSelf: true:只检查自碰撞; false:则还需检测和环境的碰撞
     * @param result: 碰撞结果
     * @return: 返回值 < 0 表示计算失败
     */
    ARAL_API_COMMON(1.0) int mdlCheckRobotCollision(const RLJntArray& joint, const bool& checkSelf, GeometryCollisionResult& result)const = 0;

2 使用例程

Setup("aubo_i5");
interface::RLJntArray joint = {-0.0143431, 0.0491329, -0.0657296, -0.0633004, -0.0799256,0.230762};
interface::GeometryCollisionResult result;

geometric_shapes::Sphere* shape     = new geometric_shapes::Sphere(0.05); // 给定包络球的半径大小
shape->setShapeName("a1");
shape->setShapeType(geometric_shapes::ShapeType::SPHERE);
interface::RLPose origin            = {0, 0, 0.1, 0, 0, 0}; // 给定包络球中心基于末端法兰坐标系的位姿
std::string link_name               = "end_effector";

//! 设置机械臂连杆对应的碰撞几何体模型
int ret = robot->mdlSetLinkCollisionGeometryModel(link_name, {static_cast<geometric_shapes::ShapePtr>(shape)}, {origin});
CHECK(ret >= 0);

//! 检测机械臂包络球是否发生自碰撞
robot->mdlCheckRobotCollision(joint, true, result);
CHECK(result.collision == false);

results matching ""

    No results matching ""